package com.ny.service;

import com.ny.entity.Device;
import java.util.Date;
import java.util.List;
import java.util.Optional;

public interface DeviceService {
    List<Device> findAll();
    /**
     * 查询所有设备信息
     * @return 设备列表
     */
    List<Device> findAllDevices();
    
    /**
     * 根据设备名称查询设备信息
     * @param deviceName 设备名称
     * @return 设备列表
     */
    List<Device> findDevicesByName(String deviceName);
    
    /**
     * 查询所有空调设备
     * @return 空调设备列表
     */
    List<Device> findAirConditioners();
    
    /**
     * 根据设备名称从MongoDB中查询设备
     * @param deviceName 设备名称
     * @return 设备列表
     */
    List<Device> findDevicesByNameInMongo(String deviceName);
    
    /**
     * 根据设备名称模糊查询MongoDB中的设备
     * @param deviceName 设备名称
     * @return 设备列表
     */
    List<Device> findDevicesByNameContainingInMongo(String deviceName);
    
    /**
     * 根据设备名称从MongoDB中查询单个设备
     * @param deviceName 设备名称
     * @return 设备Optional对象
     */
    Optional<Device> findOneDeviceByNameInMongo(String deviceName);
    
    /**
     * 根据状态查询设备
     * @param status 设备状态 (0-离线, 1-在线)
     * @return 设备列表
     */
    List<Device> findDevicesByStatus(Integer status);
    
    /**
     * 根据状态和时间范围查询设备
     * @param status 设备状态 (0-离线, 1-在线)
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 设备列表
     */
    List<Device> findDevicesByStatusAndTimeRange(Integer status, Date startTime, Date endTime);
    
    /**
     * 根据时间范围查询设备
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 设备列表
     */
    List<Device> findDevicesByTimeRange(Date startTime, Date endTime);
    
    /**
     * 根据设备ID删除设备
     * @param deviceId 设备ID
     */
    void deleteDeviceById(Integer deviceId);
    
    /**
     * 根据设备ID查询设备
     * @param deviceId 设备ID
     * @return 设备列表
     */
    List<Device> findDevicesById(Integer deviceId);
    
    /**
     * 添加设备
     * @param device 设备对象
     * @return 添加的设备数量
     */
    int addDevice(Device device);
}